Verilog-A 运算符

运算符种类比 C/Perl 少,注意位运算与逻辑运算的区别。

一元运算符(优先级 1)

运算符 定义 操作对象
+ 正数 integer, real
- 负数 integer, real
! 逻辑反(0→1,非0→0) integer, real
~ 按位取反 integer
& 按位与(归约) integer
~& 按位与非(归约) integer
| 按位或(归约) integer
~| 按位或非(归约) integer
^ 按位异或(归约) integer
^~ 按位异或非(归约) integer

示例:

a = 101;  !a is 0
a = 0;    !a is 1
a = 101;  // 0b1100101
~a = 0b0011010

二元运算符

算术(优先级 2~3)

运算符 优先级 定义 对象
* 2 乘法 int, real
/ 2 除法 int, real
% 2 取余 int, real
+ 3 加法 int, real
- 3 减法 int, real

关系(优先级 5)

< > <= >= — 返回 0 或 1

相等(优先级 6)

运算符 定义
== 等于
!= 不等于
=== 恒等(包含 X/Z 判断)
!== 恒不等(包含 X/Z 判断)

位运算(优先级 7~9)

运算符 优先级 定义
& 7 按位与
^ ^~ 8 按位异或 / 同或
| 9 按位或

逻辑运算(优先级 10~11)

运算符 优先级 定义
&& 10 逻辑与
|| 11 逻辑或

三元运算符(条件运算符)

condition ? expr_true : expr_false;

其他运算符

运算符优先级总表(从高到低)

  1. 一元:+ - ! ~ & ~& | ~| ^ ^~
  2. 乘除余:* / %
  3. 加减:+ -
  4. 移位:<< >>
  5. 关系:< > <= >=
  6. 相等: == != === !==
  7. 按位与:&
  8. 按位异或:^ ^~
  9. 按位或:|
  10. 逻辑与:&&
  11. 逻辑或:||
  12. 条件:?:(最低)

易错提醒

  1. =/! 与 ==/!= 的区别:前者把 X/Z 也当值比较,后者遇 X/Z 返回未知。
  2. 连续书写运算符有次序问题:A*B/C 结果相同,但含 real/integer 转换时易错。
  3. i++ 不支持,用 i = i + 1。

相关笔记